package Ep05_StackAndQueue._1047;

/**
 * @author Jimmy Zhan WORKSTATION
 * @date 2023/4/13 19:40
 * 说明：另辟蹊径，剑走偏锋  之   双指针解法
 */

public class DoublePointer {
    public String removeDuplicates(String s) {
        char[] chars = s.toCharArray();
        int fast = 0;
        int slow = 0;
        while (fast < s.length()){
            // 直接用fast指针覆盖slow指针的值
            chars[slow] = chars[fast];
            // 遇到前后相同值的，就跳过，即slow指针后退一步，下次循环就可以直接被覆盖掉了
            // 如果判断到相同的，slow脚下的一定的相同二者中的后者，因此slow退一步到前者
            // 与此同时fast后移一位，越过了相同二者，并将fast脚下的值覆盖slow，达到前移两位的效果
            if(slow > 0 && chars[slow] == chars[slow - 1]){
                slow--;
            }else{
                slow++;
            }
            fast++;
        }
        return new String(chars, 0, slow);
    }
}
